#ifndef __SUDOKU_H__
#define __SUDOKU_H__

#include <vector>
using namespace std;

class Sudoku
{
private:	
	static bool CheckRow(int index, int**sudoku);
	static bool CheckCol(int index, int**sudoku);
	static bool CheckRegion(int index, int**sudoku);
	static int PickValue(int index, vector<int> value, int**sudoku);
	static int FindIndex(int val, vector<int> values);
	static void Rollback(int index, vector<int>& value, int**sudoku);
	static void ConvertIndex(int index, int &row, int &col);
	static void Normalize(int& rowIdx, int& colIdx);
public:
	static int** GenerateSudoku();
};

#endif